#define _CRT_SECURE_NO_WARNINGS 1

#include<iostream>
//using namespace std;
//int main()
//{
//    int x, k;
//    int num[4] = {0};
//    int j = 3;
//    cin >> x >> k;
//    while (x)
//    {
//        if (x % 10 < k)
//        {
//            num[j--] = x % 10;
//            x /= 10;
//        }
//        else
//        {
//            num[j--] = x % 10 % k;
//            x /= 10;
//        }
//    }
//    int flag = 1;
//    for (int i = 0;i < 4;i++)
//    {
//        if (num[i]!=0&&flag)
//        {
//            cout << num[i];
//            flag = 0;
//        }
//        else if(!flag)
//        {
//            cout << num[i];
//        }
//    }
//    if (flag)
//        cout << 0;
//    return 0;
//}
////
long long quickpow(long long& x, long long& n)
{
	long long ret = 1;
	while (n)
	{
		if (n & 1)
		{
			ret *= x;
		}
		x *= x;
		n >>= 1;
	}
	return ret;
}

long long quickpowmod(long long& x, long long& n, long long& mod)
{
	long long ret = 1;
	x = x % mod;
	while (n)
	{
		if (n & 1)
		{
			ret = (ret * x) % mod;
		}
		x = (x * x) % mod;
		n >>= 1;
	}
	return ret;
}

//int main()
//{
//	int x, n;
//	cin >> x >> n;
//	int ret = quickpow(x, n);
//	cout << ret;
//	return 0;
//}
//
#include <iostream>
#include <string>
#include<algorithm>
using namespace std;
//int main()
//{
//	string m;
//	long long n;
//	long long sum = 0;
//	long long j = 1;
//	cin >> n >> m;
//	reverse(m.begin(), m.end());
//	for (int i = 0;i < m.size();i++)
//	{
//		sum += ((m[i] - '0') % n * j % n) % n;
//		j *= 10;
//	}
//	cout << sum % n;
//	return 0;
//}
#include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
//#define LL unsigned long long
//using namespace std;
//const int MAXN = 200000001;
//int n, m;
//int main()
//{
//	cin >> n;
//	m = read();
//	m == 0 ? cout<<n:cout<<m;
//	return 0;
//}
//using namespace std;
//long long n, p;
//inline int read()
//{
//	char c = getchar();
//	int x = 0;
//	int flag = 1;
//	while (c < '0' || c>'9')
//	{
//		if (c == '-')
//			flag = -1;
//		c = getchar();
//	}
//	while (c >= '0' && c <= '9')
//	{
//		x = (x * 10 + c - '0');
//		c = getchar();
//	}
//	return x * flag;
//}
//long long quickpow(long long& x, long long& y)
//{
//	long long res = 1;
//	x %= p;
//	while (y)
//	{
//		if (y & 1)
//			res = (res * x) % p;
//		x = x * x % p;
//		y >>= 1;
//	}
//	return res;
//}
//int main()
//{
//	ios::sync_with_stdio(0);
//	cout.tie(0);
//	n = read();
//	p = read();
//	long long mod = p - 2;
//	for (long long i = 1;i <= n;i++)
//		cout << quickpow(i, mod) << "\n";
//	return 0;
//}



#include<iostream>
using namespace std;
const int N = 3000010;
long long n, p, inv[N];
inline int read()
{
    char c = getchar();
    int x = 0;
    int flag = 1;
    while (c < '0' || c>'9')
    {
        if (c == '-')
            flag = -1;
        c = getchar();
    }
    while (c >= '0' && c <= '9')
    {
        x = (x * 10 + c - '0');
        c = getchar();
    }
    return x * flag;
}
int main()
{
    ios::sync_with_stdio(0);
    cout.tie(0);
    n = read();
    p = read();
    inv[1] = 1;
    puts("1");
  /*  for (int i = 2;i <= n;i++)
    {
        inv[i] = (p - p / i) * inv[p % i] % p;
        cout << inv[i] << "\n";
    }*/
    for (int i = 2;i <= n;i++)
    {
        inv[i] = (p - p / i) * inv[p % i] % p;
        printf("%lld\n", inv[i]);
    }
    return 0;
}